package IC.AST;

import IC.SemanticException;

/**
 * AST visitor interface. Declares methods for visiting each type of AST node.
 * 
 * @author Tovi Almozlino
 */
public interface Visitor {

	public Object visit(Program program) ;

	public Object visit(ICClass icClass) ;

	public Object visit(Field field) ;

	public Object visit(VirtualMethod method) ;

	public Object visit(StaticMethod method) ;

	public Object visit(LibraryMethod method) ;

	public Object visit(Formal formal) ;

	public Object visit(PrimitiveType type) ;

	public Object visit(UserType type) ;

	public Object visit(Assignment assignment) ;

	public Object visit(CallStatement callStatement) ;

	public Object visit(Return returnStatement) ;

	public Object visit(If ifStatement) ;

	public Object visit(While whileStatement) ;

	public Object visit(Break breakStatement) ;

	public Object visit(Continue continueStatement) ;

	public Object visit(StatementsBlock statementsBlock) ;

	public Object visit(LocalVariable localVariable) ;

	public Object visit(VariableLocation location) ;

	public Object visit(ArrayLocation location) ;

	public Object visit(StaticCall call) ;

	public Object visit(VirtualCall call) ;

	public Object visit(This thisExpression) ;

	public Object visit(NewClass newClass) ;

	public Object visit(NewArray newArray) ;

	public Object visit(Length length) ;

	public Object visit(MathBinaryOp binaryOp) ;

	public Object visit(LogicalBinaryOp binaryOp) ;

	public Object visit(MathUnaryOp unaryOp) ;

	public Object visit(LogicalUnaryOp unaryOp) ;

	public Object visit(Literal literal) ;

	public Object visit(ExpressionBlock expressionBlock) ;
	
}
